iT邦幫忙

2023 iThome 鐵人賽

DAY 30
1
自我挑戰組

Hello SQL 初次見面你好系列 第 30

Day 30 Redis maxmemory-policy (記憶體淘汰策略)

  • 分享至 

  • xImage
  •  

這幾天我們都一直在介紹 Redis 的相關知識,今天我們就來了解一下 Redis 作爲一個 記憶體資料庫 他擁有什麼記憶體淘汰策略

什麼是記憶體淘汰策略?

記憶體淘汰策略是一種算法或方法,用於決定當記憶體(特別是 RAM)接近或已達到其最大容量時,哪些資料或項目應該被 移除淘汰 以釋放空間
這種策略的主要目的是確保系統在記憶體受限的情況下仍能正常運作

為什麼會需要記憶體淘汰策略?

  1. 有限的記憶體資源:就像剛剛提到的,記憶體(RAM)是有限的。當資料持續增加,並且快速地填滿可用的記憶體時,系統需要一種方法來決定哪些資料應該留在記憶體中,哪些應該被移除

  2. 確保性能:不適合的記憶體管理可能會導致系統性能下降。例如,當記憶體滿了,卻沒有合適的淘汰策略,可能會導致新的請求或操作被拒絕,或系統必須頻繁地將資料移動到磁盤上,這會大大降低性能

  3. 資料的重要性不同:不是所有在記憶體中的資料都是一樣重要的。某些資料可能是暫時的、過期的或不再需要的,但是有些資料可能對系統的運作至關重要記憶體淘汰策略可以幫助系統區分這些資料,並作出明智的決策

  4. 提高系統的可靠性:正確的記憶體淘汰策略可以確保在記憶體壓力下,系統仍然可靠。例如,避免因滿記憶體導致的系統崩潰或錯誤

Redis 記憶體淘汰策略有哪些?

Redis 記憶體淘汰策略共有有 8 種

1. noeviction:

當記憶體使用達到 maxmemory 指定的上限時,每次寫入操作都會被拒絕,並返回一個錯誤,告訴客戶端記憶體已滿。這是預設的策略。

2. allkeys-lru:

當記憶體達到上限時,Redis 會根據 LRU (Least Recently Used,最近最少使用) 算法淘汰一些 Key ,然後再進行寫操作

3. volatile-lru:

這與 allkeys-lru 類似,但只對設置了 TTL(過期時間) 的 Key 進行淘汰

4. allkeys-random:

當記憶體達到上限時,Redis 會隨機選擇一些鍵進行淘汰。

5. volatile-random:

這與 allkeys-random 類似,但只對設置了 TTL 的鍵進行淘汰。

6. volatile-ttl:

在這種策略下,Redis 會優先淘汰那些剩餘生存時間 (TTL) 較短的鍵

7. volatile-lfu (Least Frequently Used):

此策略會淘汰最近最不常被訪問的鍵,但只對設置了 TTL 的鍵進行淘汰

8. allkeys-lfu:

此策略會淘汰最近最不常被訪問的鍵,不考慮該鍵是否設置了 TTL

Redis 預設的記憶體淘汰策略為 noeviction

-- 可以使用 config get maxmemory-policy 指令
-- 来查看現在 Redis 的記憶體淘汰策略

127.0.0.1:6379> config get maxmemory-policy
1) "maxmemory-policy"
2) "noeviction"

如何修改 Redis 記憶體淘汰策略?

  1. 使用 config set maxmemory-policy <策略名> 指令設定,好處是設定之後會立即生效,不需要重新啟動 Redis ,壞處是若是重新啟動 Redis 之後,這次的設定就會失效

  2. 修改 Redis 的設定文件 redis.conf,在文件中設定 maxmemory-policy <策略名> 就好,好處是重新啟動 Redis 之後設定不會失效,缺點是這種方式一定要重新啟動 Redis 才能生效

什麼是 LFU & LRU ?

在剛剛提到了 Redis 的 8 種記憶體淘汰策略,我們有看到 LFU & LRU 我們來介紹一下這兩者是什麼

LFU 和 LRU 是兩種常用的記憶體淘汰策略
它們用於決定當緩存達到其容量上限時,哪些項目應該被淘汰或替換出緩存

1. LRU (Least Recently Used):

  • 定義: LRU 是「最近最少使用」的縮寫。這種策略根據資料最後一次被訪問的時間來決定哪些項目應該被淘汰
  • 工作原理: 當緩存達到其上限時,LRU 會淘汰最長時間未被訪問的項目
  • 適用場景: 當某些資料被頻繁訪問,而其他項目較少訪問時,LRU 是一種有效的策略

2. LFU (Least Frequently Used):

  • 定義: LFU 是「最不常用」的縮寫。這種策略根據資料被訪問的頻率來決定哪些項目應該被淘汰
  • 工作原理: 它跟踪每個項目的訪問次數。當緩存達到其上限時,LFU 會淘汰訪問次數最少的項目
  • 適用場景: 當緩存中的某些項目持續被頻繁訪問,而其他項目只在一段時間內被頻繁訪問(例如,新聞頭條)時,LFU 是一種有效的策略

這兩種策略都有其優點和缺點,選擇哪一種策略取決於具體的應用場景和需求


上一篇
Day 29 Redis 中遍歷(SCAN)
系列文
Hello SQL 初次見面你好30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言